/**
 * 
 */
package com.lifeware.research.endo.controllers.utils;

import java.text.DateFormat;
import java.text.SimpleDateFormat;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import com.lifeware.research.endo.controllers.AcromegaliaController;
import com.lifeware.research.endo.controllers.IMalattieController;
import com.lifeware.research.endo.models.utils.EncryptException;
import com.lifeware.research.endo.models.utils.IEncrypter;
import com.lifeware.research.endo.views.PazienteProxy;

/**
 * <p>Fornisce metodi di utilit&agrave; ai controllori.
 * </p>
 * 
 * @author  Riccardo Cardin, (C) 2012 Lifeware
 * @version 1.0
 *
 */
@Component
public class ControllersUtils {
	
	public static final DateFormat YYYYMMDD_DATE_FORMAT = 
			new SimpleDateFormat("yyyy-MM-dd");
	
	private IEncrypter encrypter;
	
	/* Controllers */
	@Autowired
	private AcromegaliaController acromegaliaController;
	
	/**
	 * <p>Effettua la crittazione sull'identificativo del paziente.
	 * </p>
	 * 
	 * @param  paziente
	 * @throws EncryptException Nel caso in cui l'anonimizzazione del 
	 *         paziente non vada a buon fine.
	 */
	public void anonimizza(PazienteProxy paziente) throws EncryptException {
		
		/* Rendo anonimo il codice fiscale del paziente */
		paziente.setIdentificativo(
				this.encrypter.encrypt(
						paziente.getIdentificativo()));
	}
	
	/**
	 * <p>Dato un paziente, inizializza ritorna il controller necessario a 
	 *    gestire le richieste per la malattia selezionata.
	 * </p>
	 * 
	 * @param paziente Il paziente da cui estrarre la malattia.
	 */
	public IMalattieController getMalattiaController(PazienteProxy paziente) {
		
		IMalattieController malattiaController = null;
		
		if (paziente != null) {
			
			String malattia = paziente.getMalattia();
			switch (malattia) {
			
			case AcromegaliaController.ACROMEGALIA_SCHEDA_BASE:
				
				malattiaController = this.acromegaliaController;
				break;

			default:
				/* Nessun default */
				break;
			}
			
		}   // if (paziente != null)...
		
		return malattiaController;
	}
	
	/**
	 * <p>Data la descrizione di una malattia ritorna il controller necessario 
	 *    a gestirne le richieste.
	 * </p> 
	 * 
	 * @param descrizioneMalattia La malattia per cui si richiede il 
	 *        controller.
	 * @return Un controller per la gestione delle richieste della malattia.
	 */
	public IMalattieController getMalattiaController(String descrizioneMalattia) {
		
		IMalattieController malattiaController = null;
		
		if (descrizioneMalattia != null) {
			
			/* Ricavo il controller della malattia */
			switch (descrizioneMalattia) {
			
			case AcromegaliaController.ACROMEGALIA_DESCRIZIONE:
				
				malattiaController = this.acromegaliaController;
				break;

			default:
				/* Nessun default */
				break;
			}
			
		}   // if (descrizioneMalattia != null)...
		
		return malattiaController;
	}

	public AcromegaliaController getAcromegaliaController() {
		return acromegaliaController;
	}

	public void setAcromegaliaController(AcromegaliaController acromegaliaController) {
		this.acromegaliaController = acromegaliaController;
	}

	public IEncrypter getEncrypter() {
		return encrypter;
	}

	public void setEncrypter(IEncrypter encrypter) {
		this.encrypter = encrypter;
	}
}
